package com.framework.file.service;

import com.framework.file.dto.SysFileDto;
import com.framework.file.model.SysFile;
import com.framework.file.param.SysFileParam;
import com.framework.file.vo.ChunkMergeVo;
import com.framework.file.vo.ChunkVo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface ISysFileService {
    /**
     * 文件上传
     *
     * @param sysFile
     * @return
     */
    String upload(SysFileDto sysFile) throws Exception;

    /**
     * 上传新文件并替换原文件信息
     * @param sysFile
     * @param oldFileId 旧文件id
     * @throws Exception
     */
    void uploadAndUpdate(SysFileDto sysFile,String oldFileId)throws Exception;
    /**
     * 文件下载
     *
     * @param id
     * @return
     */
    void download(String id) throws Exception;

    /**
     *
     * @param id
     * @return 完整信息 包含inputStream
     * @throws Exception
     */
    SysFileDto getFileData(String id) throws Exception;

    /**
     * 文件删除
     *
     * @param id
     */
    void deleteFile(String id);

    /**
     * 根据业务id和part删除
     * @param form
     * @param part
     */
    void deleteFileByFormAndPart(String form, String part);

    /**
     * 文件预览
     *
     * @param id
     * @return
     */
    String preview(String id) throws Exception;


    /**
     * 根据模块和表单查询文件列表
     *
     * @param module
     * @param form
     * @return
     */
    List<SysFile> getFileByModuleAndForm(String module, String form, String part);

    Page<SysFile> listPage(SysFileParam param, PageRequest pageRequest);

    /**
     * 批量获取预览地址
     *
     * @param idList
     * @return
     */
    Map<String, String> previewBatch(List<String> idList) throws Exception;

    String save(SysFile sysFile);

    SysFile findOne(String id);

    String uploadChunk(MultipartFile file, ChunkVo chunkVo) throws Exception;

    String mergeChunks(ChunkMergeVo mergeFileVueVo, ChunkVo chunkVo);
}
